mysql 触发器语法

您所在的位置:网站首页 mysql 行级触发器 mysql 触发器语法

mysql 触发器语法

2023-08-01 19:12| 来源: 网络整理| 查看: 265

1、什么是触发器(trigger)

通俗来说:比如有个规则,我学习你就要去玩,这时候就可以把这个规则写成触发器,当我一学习你就自动去玩耍了。在mysql里就是,比如规则是我在表1插入一条数据,表2也自动插入这条数据,这时候就可以把这个规则写进触发器,当我在表1插入数据时,“自动”执行表2插入该条数据。当然,不仅是insert,增(insert)删(delete)改(update)都能设置触发器。

2、定义触发器

语法(单条触发语句): create trigger 触发器名 before/after 事件 on 表名 for each row 触发器语句;

定义触发器注意事项: 1、触发器名建议为trigger_xxx,这样便于区分,触发器名不能重复。 2、before|after 代表触发器语句执行时间,如果是before,就是在insert|delete|update操作之前执行触发器语句;after就是之后。 3、事件就是insert delete update操作中的一个。 4、 for each row 是代表任何记录执行对应操作都会触发器。 5、触发器语句就是触发器触发时要执行的语句。

从定义触发器中我们发现:一张表最大能有6个触发器(32:增删改三种操作两种时间(before/after))

例如:有两张表,account表和account-history表,每次更新账户表account时,就把变更记录插入历史表account-history,这也合乎事实,每次账户花钱或者来钱,都在账户历史表上新增一条变更记录。 创建触发器:

CREATE TRIGGER trig_account_his AFTER UPDATE ON account FOR EACH ROW INSERT INTO account_history(account_name,changed_cash) VALUES(new.name,new.cash-old.cash);

测试:

UPDATE account SET cash=cash+10000 WHERE NAME="cust";

语法(多条触发语句): delimiter@@ create trigger 触发器名 before/after insert/update/delete on 表名 for each row begin 触发语句1;触发语句2;…触发语句n; end@@; delimiter ;

为啥要用delimiter@@? 在MySQL中分号(;)默认是语句结束符,而多条触发语句之间使用分号(;)显然是会出问题的,所以在命令行使用多个触发语句时应当先修改语句结束符为@@,当然这个是自己选择的,也可以设置为$$,在最后用完之后再将语句结束符修改为分号(;)。

3、MySQL查看触发器

1、show triggers:查看所有的触发器 2、select * from triggers:在information_schema中查看triggers表 ps:加where条件进行条件查询 3、show create trigger触发器名:查看触发器的创建语句 4、drop trigger 触发器名:删除触发器

4、MySQL触发器中的新旧记录

insert:新增记录,没有旧记录; delete:删除旧记录,没有新记录; update:有变更后的新纪录,也有被变更的旧记录

我们可以用old | new来引用这些记录 在for each row 后的触发语句中使用,如下:

for each row insert into 记录表 values(old.xxx,new.yyy)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3